#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <algorithm>
#include <string>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* removeNthFromEnd(ListNode* head, int n) {
    int i=0,j=1;
    ListNode* temp=head;
    while(temp!= nullptr){
        i++;
        temp=temp->next;
    }
    if(n==i){head=head->next;return head;}
    ListNode* temp1=head;
    while(1){
        if(j==i-n){
            ListNode*tt=temp1->next;
            tt=tt->next;
            temp1->next=tt;
            break;
        }
        temp1=temp1->next;
        j++;
    }
    return head;
}

int main(){
    ListNode* head=new ListNode(1);
    ListNode* temp=head;
//    for(int i=2;i<=5;i++){
//        temp->next=new ListNode(i);
//        temp=temp->next;
//    }

//    while(head!=nullptr){
//        cout<<head->val<<"\n";
//        head=head->next;
//    }

    ListNode*result;
    result=removeNthFromEnd(head,1);
    while(result!=nullptr){
        cout<<result->val<<"\n";
        result=result->next;
    }
    return 0;
}